import torch
import torch.nn.functional as F

input_val = torch.tensor([[1, 2, 0, 3, 1],
                          [0, 1, 2, 3, 1],
                          [1, 2, 1, 0, 0],
                          [5, 2, 3, 1, 1],
                          [2, 1, 0, 1, 1]])

kernel = torch.tensor([[1, 2, 1],
                       [0, 1, 0],
                       [2, 1, 0]])

# 重塑输入张量以便于进行二维卷积操作
input_val = torch.reshape(input_val, (1, 1, 5, 5))
# 重塑卷积核张量以匹配输入张量的形状
kernel = torch.reshape(kernel, (1, 1, 3, 3))

# 打印输入张量和卷积核张量的形状
print(input_val.shape)
print(kernel.shape)

# 使用步长为1的卷积操作，这是标准的卷积方式
output_value = F.conv2d(input_val, kernel, stride=1)
print(output_value)

# 使用步长为2的卷积操作，这种方式可以减小输出尺寸
output_value2 = F.conv2d(input_val, kernel, stride=2)
print(output_value2)

# 使用步长为1和填充为1的卷积操作，这种方式可以保持输入和输出的尺寸相同
output_value3 = F.conv2d(input_val, kernel, stride=1, padding=1)
print(output_value3)
